Durable Objects とは?
https://scrapbox.io/files/674ea64e7b649fb514a3906a.webp
はじめまして倉橋 渉太です
Durable Objectsについてまとめてみました。
結論
リアルタイム通信と整合性のあるストレージの基盤を提供しているもの。
具体的に言うと、独自のリアルタイムデータベースを作成するための基盤のみを提供しているもの。
開発された背景
現状のデータベースの問題点
クラウドベースの、データベースは作成する際に地域(リージョン)を設定する必要があった。 また、現状のデータベースはリアルタイムに対応できるように設計されていない。
スップレッドシートなどリアルタイムに同時に編集する場合、どうしても遅延が起きてしまう。これは地域(リージョン)が遠いところからアクセスするとなおさら顕著になる。
例:リージョンを東京にした場合。 ブラジルから編集する人と東京から編集する人がいると遅延がとんでもないことになるよね?遠いから じゃあリージョンを分けてブラジルならブラジルのデータベースに東京は東京のデータベースに保存すればいいのでは?となるが、その場合、整合性が取れなくなってしまう。リージョンが違うと別のデータベースだからね。 👆を解決するには、中間地点に調節するサーバーを設置する。Googleとかはこのようにして遅延を少なくしている。 Durable Objectsが解決するもの
👆ユーザーの近い場所で処理しようね。そうすると遅延も少ないし、パフォーマンスもいいよ🙌🙌って感じ
データベースもエッジ上で動作すればリアルタイムで通信できるんじゃね? でも、ユーザーの近くで処理するから整合性とれなくない? Durable Objectsを使ってエッジ上で動作するリアルタイムデータベースをみんなで作ってWeb全体をリアルタイム通信が標準な世界にしていこうというものである。 詳しく
リアルタイムデータベースを構築するための基盤を提供するものです。
1. WebSocket通信のAPIを提供
👆データをリアルタイムで受け取るまではDurable Objects側が自動でやるから、受け取った後に、そのデータをどうするかの処理をあなたが書いてねって感じ。 WebSocketをつなげていてもデータ受信がない場合つなぎっぱにすると無駄なリソースになるため一定時間通信がないと休止状態に入る。再度データが来たら再起動する。もちろん休止前の状態から復活する。コストも最適化してくれる。 👆お前にデータ送信してなくて通信量もったいないから寝てていいよ、データ来たら起こすねって感じ。
2. ストレージ機能
データベースと同じデータを保存してくれる。整合性もとってくれる 👆AさんとBさんが同時に保存しようとしても自動でいい感じにする感じ
基本何でも保存できる。画像だろうと
3. 分散システム
👆授業で出てきたやつ!
料理で例えると
丼を作るが何丼を作るか決まっていない状態。
他の製品と何が違うの?
Firebase RealTime Databaseとの違い
table:table
レイヤー Firebase Realtime Database Cloudflare Durable Objects
API 高レベルAPI(データの保存、取得、同期) 低レベルAPI(データ保存、状態管理、リアルタイム通
データ管理 データ保存とクライアント間のリアルタイム同期 オブジェクトごとの状態管理とリアルタイム通信
実装 リアルタイムデータベースエンジンが処理 開発者が独自のビジネスロジックを実装
インフラストラクチャー Googleのクラウドインフラ上で動作 Cloudflareのクラウドインフラ上で動作
Cloudflare D1
まとめ
それでは良きDurable Objectsライフを!